package sicnu.cs.aps.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import sicnu.cs.aps.domain.dto.ActivityTeamQueryDto;
import sicnu.cs.aps.domain.dto.TeamStuDto;
import sicnu.cs.aps.domain.dto.TeamTeacherDto;
import sicnu.cs.aps.domain.entity.ActivityTeam;
import sicnu.cs.aps.domain.entity.StudentInfo;
import sicnu.cs.aps.domain.entity.TeacherInfo;

import java.util.List;

/**
 * description 小队表mapper
 *
 * @author chenhetao
 * @version 1.0
 * @className ActivityTeamMapper
 * @packageName sicnu.cs.aps.mapper
 * @date 2022/5/31 11:02
 */
@Mapper
public interface ActivityTeamMapper extends BaseMapper<ActivityTeam> {
    /**
     * 通过队伍id修改队伍状态
     *
     * @param state  需要修改的状态
     * @param teamId 队伍id
     * @return 影响行数
     */
    int updateStates(@Param("state") Integer state, @Param("teamId") Long teamId);

    /**
     * 通过队伍id返回队伍信息
     *
     * @param teamId 队伍id
     * @return 队伍信息
     */
    ActivityTeam selectByTeamId(@Param("teamId") Long teamId);

    /**
     * 通过teamId 查询 小队中的学生成员
     *
     * @param teamId 队伍id
     * @return 队伍中学生的信息
     */
    List<StudentInfo> listStudentInTeam(@Param("teamId") Long teamId);

    /**
     * 查询 小队列表中的学生成员
     *
     * @param teamIds 小队列表
     * @return 所有队伍中的学生信息
     */
    List<TeamStuDto> listStudentInTeams(@Param("teamIds") List<Long> teamIds);

    /**
     * 通过teamId 查询队伍的指导老师
     *
     * @param teamId 队伍id
     * @return 队伍指导老师信息
     */
    TeacherInfo selectTeacherInTeam(@Param("teamId") Long teamId);

    /**
     * 查询队伍列表的指导老师
     *
     * @param teamIds 队伍列表
     * @return 指导老师们的信息
     */
    List<TeamTeacherDto> listTeacherInTeams(@Param("teamIds") List<Long> teamIds);

    /**
     * 通过teamId 查询老师的队长
     *
     * @param teamId 队伍id
     * @return 队伍队长信息
     */
    StudentInfo selectCaptionInTeam(@Param("teamId") Long teamId);

    /**
     * 通过teamId列表查询队长们的信息
     *
     * @param teamIds 队员id
     * @return 队伍的队长们的信息
     */
    List<TeamStuDto> listCaptionInTeams(@Param("teamIds") List<Long> teamIds);

    /**
     * 通过条件查询符合条件的小队
     *
     * @param teamQueryDto 查询条件
     * @return 小队列表
     */
    List<ActivityTeam> listTeamByCondition(@Param("query") ActivityTeamQueryDto teamQueryDto);

    /**
     * 更新为活动进行中的状态
     *
     * @return 更新行数
     */
    int updateToActivityOnState();

    /**
     * 更新为待反馈的状态
     *
     * @return 更新行数
     */
    int updateToFeedbackState();
}
